package com.sicheng.lc.lc笔试;

import java.util.Scanner;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/9/13 21:05
 */
public class 上升子序列 {
    /**
     * 小明刚刚学会用动态规划方法解决最长上升子序列（LIS）问题。LIS 的 O(n2) 动态规划解法是这样的：
     * 设 dp[i] 为以 i 结尾的最长上升子序列的长度，首先令所有的 dp[i] = 1，
     * 转移由 dp[j] 转移过来，要求 j ∈ [1, i − 1] 且 aj < ai。转移方程就是dp[i] = max(dp[i], dp[j] + 1)。
     * 最后 max dp[i] 就是答案。
     * <p>
     * 1≤j<i  1≤i≤n
     * <p>
     * 明现在想知道：有多少个长度为 n 的整数序列，每个整数都在 [1, m] 之内，
     * 且这个序列的最长上升子序列的长度恰好等于3？由于答案可能会很大，
     * 求得的结果对998244353 取模即可。
     * <p>
     * <p>
     * <p>
     * 输入描述
     * 输入仅一行两个正整数 n, m。
     * <p>
     * 3 ≤ n ≤ 500, 1 ≤ m ≤ 10。
     * <p>
     * 输出描述
     * 输出一个整数，表示答案对 998244353取模后的结果。
     * <p>
     * <p>
     * 样例输入
     * 4 3
     * 样例输出
     * 9
     */
    static int mod = 998244353;
    static int N = 500;
    static int M = 10;
    static int[][] dp = new int[4][M + 1];
    static int n, m;
    static int[][] c = new int[N + 1][4];

    static {
        for (int i = 0; i <= N; i++) {
            c[i][0] = 1;
        }
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= 3; j++) {
                c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;
            }
        }
    }

    static void init() {
        for (int i = 1; i <= m; i++) {
            dp[1][i] = 1;
        }
        for (int i = 2; i <= 3; i++) {
            for (int j = 1; j <= m; j++) {
                for (int k = j + 1; k <= m; k++) {
                    dp[i][j] = (dp[i][j] + dp[i - 1][k]) % mod;
                }
            }
        }
    }

    // fixme 解答有问题 还没想到正确的思路
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        init();
        long res = 0;
        long[] p = new long[n];
        p[0] = 1;
        for (int i = 1; i < n; i++) {
            p[i] = (p[i - 1] * m) % mod;
        }
        for (int j = 1; j <= m; j++) {
            res += (long) c[n][3] * dp[3][j] % mod * p[n - 3] % mod;
            res %= mod;
        }
        System.out.println(res);
    }
}
